package com.ruoyi.system.mapper;

import com.ruoyi.system.domain.SpokenUser;
import com.ruoyi.system.domain.SpokenUserCourseTime;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface SpokenUserCourseTimeMapper {

    /**
     * 添加学生购买课时
     * @param list
     * @return
     */
    public int insert(@Param("userCourseTimes") List<SpokenUserCourseTime> list);

    /**
     * 修改
     */
    public int update(SpokenUserCourseTime userCourseTime);

    /**
     * 根据条件查询未被取消的课时：用户ID、教师ID、订单id、日期、时间段Id
     * @param userCourseTime
     * @return
     */
    public List<SpokenUserCourseTime> select(SpokenUserCourseTime userCourseTime);

    /**
     * 根据主键ID查询
     */
    public SpokenUserCourseTime selectIdByPrimaryKey(Long uctId);

    /**
     * 查询对应订单选择的课时数量 (待支付、正常、消课)
     * @param orderId
     * @return
     */
    public Integer selectCountByOrderId(Long orderId);

    /**
     * 查询对应订单选择的课时数量 (待支付、正常、消课、取消)
     */
    public Integer mobileSelectCountByOrderId(Long orderId);

    /**
     * 根据订单Id查询课时
     */
    public List<SpokenUserCourseTime> selectUserCourseTimeByOrderId(Long orderId);

    /**
     * 根据用户ID查询用户选择的日期
     */
    public List<SpokenUserCourseTime> selectUserCourseTimeByUserId(Long userId);

    /**
     * 根据日期、用户ID查询对应日期的教师ids
     * @param chooseDate
     * @return
     */
    public List<SpokenUserCourseTime> selectTeacherIdByDate(@Param("chooseDate") String chooseDate, @Param("userId")Long userId);

    /**
     * 查询用户在某个教师下预约了多少节
     * 只查询 状态为 正常 or 已消课的
     * @param useId
     * @param teacherId
     * @return
     */
    public Integer selectLessonNumByTeacherId(@Param("userId")Long useId, @Param("teacherId")Long teacherId);

    /**
     * 查询用户在某个教师下消课了多少节
     * 只查询 状态为 已消课的
     * @param useId
     * @param teacherId
     * @return
     */
    public Integer selectCancelLessonNumByTeacherId(@Param("userId")Long useId, @Param("teacherId")Long teacherId);

    /**
     * 查询待消课的课时
     * @return
     */
    public List<SpokenUserCourseTime> selectWaitCancelLesson();

    /**
     * 统计使用：根据教师ID和日期查询消课数量
     * @param teacherId
     * @param startDate
     * @param endDate
     * @return
     */
    public Integer selectTeacherCancelLessonCount(@Param("teacherId") Long teacherId, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /***
     * 查询距离上课时间两小时内的课程信息
     * @return
     */
    public List<SpokenUserCourseTime> select2HoursFromClass(@Param("today") String today);
}
